//#define _CRT_SECURE_NO_WARNINGS 1
//
//#include<stdio.h>
//
//int min_beishu(int a, int b)
//{
//	int t = (a>b?a:b);
//	for (;t <= a * b;t++)
//		if (t % a == 0 && t % b == 0)
//			return t;
//}
//
//int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d %d", &a, &b);
//	int x = 0;
//	x = min_beishu(a, b);
//	printf("%d", x);
//	return 0;
//}

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

void print_reserve(char* arr)
{
	int i = 0;
	while (*(arr+i) != ' '&&*(arr+i)!='\0')
		i++;
	if(*(arr+i) != '\0')
		print_reserve(arr + i + 1);
	int x = 0;
	for (x = 0;x <= i;x++)
		printf("%c", arr[x]);
	if (arr[x] == '\0')
		printf(" ");
}

int main()
{
	char str[101] = { 0 };
	gets(str);
	print_reserve(str);
}

//#define _CRT_SECURE_NO_WARNINGS 1
//
//#include<stdio.h>
//
//void print_reserve(char* arr)
//{
//	char* end = arr;
//	while (*end != '\0')
//		end++;
//	char* start = end;
//	while (*start != ' '&&start>arr)
//		start--;
//	char* tmp = start;
//	for (tmp++;tmp < end;tmp++)
//		printf("%c", *tmp);
//	printf(" ");
//
//	while(start>=arr)
//	{
//		end = start;
//		if (start - 1 >= arr)
//			start -= 1;
//		else
//			return ;
//		while (*start != ' ' && start > arr)
//			start--;
//		if (*start == ' ')
//			tmp = start+1;
//		else if(start == arr)
//			tmp = start;
//		for (;tmp <= end;tmp++)
//			printf("%c", *tmp);
//	}
//}
//
//int main()
//{
//	char str[101] = { 0 };
//	gets(str);
//	print_reserve(str);
//}